package cn.jobstart.web.common;



import cn.jobstart.common.redis.RedisUtil;
import cn.jobstart.web.common.enums.UserTypeEnum;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

/**
 * Created with IntelliJ IDEA.
 * User: Yuan.x.i.n@foxmail.com
 *
 * @author Yuan.x.i.n@foxmail.com
 * @Date 2019-12-09 09:56
 * @description
 */
@Component
public class ValidateCodeUtil extends RedisUtil {
    private static final String VALIDATE_CODE_PREFIX_KEY = "vc:";
    private static final String SMS_REG_CODE_PREFIX_KEY = "src:";
    private static final long DEFAULT_EXPIRE_TIME = 10 * 60;

    /**
     * 设置企业登录的图片验证码
     *
     * @param account 账号名或者唯一标识
     * @param type    0 个人 1企业 2后台
     * @param code    验证码
     */
    private void setValidateCodePrivate(String account, int type, String code) {
        String key = VALIDATE_CODE_PREFIX_KEY + type + account;
        set(key, code, DEFAULT_EXPIRE_TIME);
    }


    public void setValidateCode(String account, String code) {
        setValidateCodePrivate(account, 0, code);
    }

    /**
     * 获取图片验证码
     *
     * @param account 账号名或者唯一标识
     * @param type    0 个人 1企业 2后台
     * @return
     */
    public String getValidateCodePrivate(String account, int type) {
        String key = VALIDATE_CODE_PREFIX_KEY + type + account;
        return (String) get(key);
    }

    public String getValidateCode(String account) {
       return  getValidateCodePrivate(account,0);
    }

    public void delValidateCodePrivate(String account, int type) {
        String key = VALIDATE_CODE_PREFIX_KEY + type + account;
        del(key);
    }

    /**
     * 图片验证码获取，并清除
     * @param account
     * @param imageCode
     * @return
     */
    public boolean checkAndRemoveValidateCode(String account, String imageCode) {
        if (StringUtils.isEmpty(imageCode)) {
            return false;
        }
        boolean res;
        String code = getValidateCodePrivate(account,0);
        if (imageCode.equalsIgnoreCase(code)) {
            res = true;
        } else {
            res = false;
        }
        delValidateCodePrivate(account, 0);
        return res;
    }


    /**
     * 添加注册短信验证码
     *
     * @param account 账号名或者唯一标识
     * @param type    0 个人 1企业 2后台
     * @param code    验证码
     */
    public void setSmsRegCode(String account, int type, String code) {
        String key = SMS_REG_CODE_PREFIX_KEY + type + account;
        set(key, code, DEFAULT_EXPIRE_TIME);
    }

    /**
     * 获取注册短信验证码
     *
     * @param account 账号名或者唯一标识
     * @param type
     * @return
     */
    public String getSmsRegCode(String account, int type) {
        String key = SMS_REG_CODE_PREFIX_KEY + type + account;
        return (String) get(key);
    }

    /**
     * 添加后台注册短信验证码
     *
     * @param account 账号名或者唯一标识
     * @param code
     */
    public void setAdminSmsRegCode(String account, String code) {
        setSmsRegCode(account, UserTypeEnum.admin.getType(), code);
    }

    /**
     * 获取后台注册短信验证码
     *
     * @param account 账号名或者唯一标识
     */
    public String getAdminSmsRegCode(String account) {
        return getSmsRegCode(account, UserTypeEnum.admin.getType());
    }


    /**
     * 添加个人注册短信验证码
     *
     * @param account 账号名或者唯一标识
     * @param code
     */
    public void setPersonSmsRegCode(String account, String code) {
        setSmsRegCode(account, UserTypeEnum.PERSON.getType(), code);
    }

    /**
     * 获取个人注册短信验证码
     *
     * @param account 账号名或者唯一标识
     */
    public String getPersonSmsRegCode(String account) {
        return getSmsRegCode(account, UserTypeEnum.PERSON.getType());
    }

    /**
     * 添加企业注册短信验证码
     *
     * @param account 账号名或者唯一标识
     * @param code
     */

    public void setCompanySmsRegCode(String account, String code) {
        setSmsRegCode(account, UserTypeEnum.COMPANY.getType(), code);
    }

    /**
     * 获取企业注册短信验证码
     *
     * @param account 账号名或者唯一标识
     */
    public String getCompanySmsRegCode(String account) {
        return getSmsRegCode(account, UserTypeEnum.COMPANY.getType());
    }

}
